/**
* Analytica - beta version - Systems Monitoring Tool
*
* Copyright (C) 2013, KleeGroup, direction.technique@kleegroup.com (http://www.kleegroup.com)
* KleeGroup, Centre d'affaire la Boursidi�re - BP 159 - 92357 Le Plessis Robinson Cedex - France
*
* This program is free software; you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Foundation;
* either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program;
* if not, see <http://www.gnu.org/licenses>
*
* Linking this library statically or dynamically with other modules is making a combined work based on this library.
* Thus, the terms and conditions of the GNU General Public License cover the whole combination.
*
* As a special exception, the copyright holders of this library give you permission to link this library
* with independent modules to produce an executable, regardless of the license terms of these independent modules,
* and to copy and distribute the resulting executable under terms of your choice, provided that you also meet,
* for each linked independent module, the terms and conditions of the license of that module.
* An independent module is a module which is not derived from or based on this library.
* If you modify this library, you may extend this exception to your version of the library,
* but you are not obliged to do so.
* If you do not wish to do so, delete this exception statement from your version.
*/
package io.analytica.spies.imp.javassist.agentloader;
import java.lang.management.ManagementFactory;
import org.apache.log4j.Logger;
/**
* Class utilitaire de chargement d'un agent de la VM, apr�s son d�marrage.
* @author npiedeloup
* @version $Id: VirtualMachineAgentLoader.java,v 1.1 2011/05/12 10:16:12 prahmoune Exp $
*/
public final class VirtualMachineAgentLoader {
private static final Logger LOG = Logger.getLogger(VirtualMachineAgentLoader.class);
private static final String VIRTUAL_MACHINE_CLASS_NAME = "com.sun.tools.attach.VirtualMachine";
private VirtualMachineAgentLoader() {
//rien
}
/**
* Charge un agent � chaud.
* @param agentPath Chemin vers le jar de l'agent
* @param option option de l'agent
*/
public static void loadAgent(final String agentPath, final String option) {
LOG.info("dynamically loading javaagent: " + agentPath + "=" + option);
final String nameOfRunningVM = ManagementFactory.getRuntimeMXBean().getName();
final int p = nameOfRunningVM.indexOf('@');
final String pid = nameOfRunningVM.substring(0, p);
try {
//on check, pour indiquer o� trouver ce jar
VirtualMachineAgentLoader.class.getClassLoader().loadClass(VIRTUAL_MACHINE_CLASS_NAME);
} catch (final ClassNotFoundException e) {
throw new RuntimeException("La class " + VIRTUAL_MACHINE_CLASS_NAME + " est utilis�e pour ajout l'agent � la VM. Ajouter le tools.jar du jdk 1.6+ dans le classpath", e);
}
try {
final com.sun.tools.attach.VirtualMachine vm = com.sun.tools.attach.VirtualMachine.attach(pid);
vm.loadAgent(agentPath, option);
vm.detach();
} catch (final Exception e) {
throw new RuntimeException(e);
}
}
}